package com.liuugoqing.creator.singleton.question.reflection;

import java.io.Serializable;

/**
 * 反射出现的问题
 * @Author : liugq
 * @Date : 2022/6/28 11:39
 * @See : 参考类
 * @Since： JDK1.8
 * @Version : 1.0
 */
public class Singleton implements Serializable {

    private static boolean flag = false;

    /**
     * 私有的构造方法中，添加不为空的判断，解决反射出现的问题
     * @author liugq
     * @date 2022/6/28 12:10
     * @return null
     */
    private Singleton(){
        //反射判断
        if ( flag )
            throw new RuntimeException("对象不能创建多个");
        flag = true;
    }

    private static class SingletonHolder{
        private static final Singleton single = new Singleton();
    }

    public static Singleton getInstance(){
        return SingletonHolder.single;
    }

    /**
     * 解决单例模式序列化时的问题
     * @author liugq
     * @date 2022/6/28 11:48
     * @return java.lang.Object
     */
    private Object readResolve(){
        return getInstance();
    }

}
